#ifndef _NUCLEAR_ENGINE_H_
#define _NUCLEAR_ENGINE_H_

// package common
#include <common/Event.h>
#include <common/Exception.h>
#include <common/Object.h>
#include <common/Any.h>
#include <common/SharedPtr.h>
#include <common/Singleton.h>
#include <common/Manager.h>
#include <common/State.h>
#include <common/FiniteStateMachine.h>
#include <common/Unicode.h>

// package mathematics
#include <mathematics/Math.h>
#include <mathematics/Random.h>
#include <mathematics/Vector2.h>
#include <mathematics/Vector3.h>
#include <mathematics/Vector4.h>
#include <mathematics/Color.h>
#include <mathematics/Matrix3.h>
#include <mathematics/Matrix4.h>
#include <mathematics/Quaternion.h>
#include <mathematics/Node.h>

// 2D Geometry
#include <mathematics/Geometry.h>
#include <mathematics/Triangle.h>
#include <mathematics/Rectangle.h>
#include <mathematics/Polygon.h>
#include <mathematics/Circle.h>
#include <mathematics/Ring.h>

// 3D Geometry
#include <mathematics/Plane.h>
#include <mathematics/AABB.h>
#include <mathematics/Capsule.h>
#include <mathematics/Sphere.h>
#include <mathematics/Ray.h>
#include <mathematics/Frustum.h>

// package algorithm
#include <algorithm/RadixSort32.h>

// package system
#include <system/Screen.h>
#include <system/Timer.h>
#include <system/Mutex.h>
#include <system/Thread.h>
#include <system/Log.h>
#include <system/Mouse.h>
#include <system/Keyboard.h>
#include <system/MouseEvent.h>
#include <system/KeyboardEvent.h>

#include <system/Resource.h>
#include <system/ResourceManager.h>

#if NE_RENDER_SYSTEM == NE_RENDER_SYSTEM_OPENGL
#include <system/GlutApplication.h>
#endif

// package graphics
#include <graphics/Engine.h>
#include <graphics/RenderSystem.h>

#include <graphics/PrimitiveDeclaration.h>
#include <graphics/RenderableObject.h>
#include <graphics/RenderOption.h>
#include <graphics/RenderPass.h>

#include <graphics/GLObject.h>
#include <graphics/GLBufferObject.h>
#include <graphics/GLBufferObjectManager.h>
#include <graphics/GLFrameBufferObject.h>
#include <graphics/GLRenderBufferObject.h>
#include <graphics/VertexAttribute.h>
#include <graphics/VertexData.h>
#include <graphics/IndexData.h>

#include <graphics/Fog.h>
#include <graphics/Light.h>

#include <graphics/Material.h>
#include <graphics/MaterialFileFormat.h>
#include <graphics/MaterialManager.h>
#include <graphics/Image.h>
#include <graphics/ImageManager.h>
#include <graphics/Texture.h>
#include <graphics/TextureManager.h>
#include <graphics/Font.h>
#include <graphics/FontManager.h>

#include <graphics/Camera.h>
#include <graphics/Viewport.h>

#include <graphics/Sprite.h>
#include <graphics/Atlas.h>

#include <graphics/Billboard.h>
#include <graphics/BillboardSet.h>

#include <graphics/DynamicGeometry.h>

#include <graphics/SubMesh.h>
#include <graphics/Mesh.h>
#include <graphics/MeshFileFormat.h>
#include <graphics/MeshManager.h>

#include <graphics/Joint.h>
#include <graphics/Skeleton.h>
#include <graphics/SkeletonFileFormat.h>
#include <graphics/SkeletonManager.h>

#include <graphics/Model.h>
#include <graphics/ModelFileFormat.h>
#include <graphics/ModelManager.h>

#include <graphics/SubSkin.h>
#include <graphics/Skin.h>
#include <graphics/SkinModel.h>
#include <graphics/SkinModelManager.h>

#include <graphics/Terrain.h>

// package graphics of GLSL
#include <graphics/GLSLShader.h>
#include <graphics/GLSLProgram.h>
#include <graphics/GLSLFileFormat.h>
#include <graphics/GLSLManager.h>

// package animation
#include <animation/KeyFrame.h>
#include <animation/NumericKeyFrame.h>
#include <animation/TransformKeyFrame.h>
#include <animation/AnimationTrack.h>
#include <animation/NumericAnimationTrack.h>
#include <animation/NodeAnimationTrack.h>
#include <animation/AnimationFileFormat.h>
#include <animation/Animation.h>
#include <animation/AnimationGroup.h>
#include <animation/AnimationManager.h>

// package partical
#include <partical/ParticleSystem.h>
#include <partical/ParticleSystemRenderer.h>
#include <partical/ParticleSystemManager.h>

// package audio
#include <audio/PianoKeyboard.h>
// package audio of MIDI
#include <audio/MIDI/MIDI.h>

// package UI
#include <UI/UI.h>

// package tool
//#include <tool/XMLImporter.h>
//#include <tool/XMLExporter.h>
#include <tool/TangentSpaceCalculator.h>
#include <tool/MeshXMLLoader.h>


#ifdef NE_OUTPUT_INFO
    #include <neinfo.h>
#endif

#endif
